package com.emapp.lccode.bean

import com.google.gson.Gson
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import com.google.gson.reflect.TypeToken
import java.lang.reflect.Type

/**
 *@Description: TODO
 *@Author:  zhang
 *@Date:   2023/8/2
 */
class MapJsonDeserialize : JsonDeserializer<Geometry> {
    override fun deserialize(
        json: JsonElement?,
        typeOfT: Type?,
        context: JsonDeserializationContext?
    ): Geometry? {
        if (json == null || !json.isJsonObject) return null
        val jsonObject = json.asJsonObject
        val type = jsonObject.get("type").asString
        // 根据 type 的值确定 value 字段的类型
        val coordinates: Any? = when (type) {
            "LineString" -> {
                val arrayType = object : TypeToken<List<List<Double>>>() {}.type
                Gson().fromJson<List<List<Double>>>(jsonObject.getAsJsonArray("coordinates"), arrayType)
            }
            "Polygon" , "MultiLineString"-> {
                val arrayType = object : TypeToken<List<List<List<Double>>>>() {}.type
                Gson().fromJson<List<List<List<Double>>>>(jsonObject.getAsJsonArray("coordinates"), arrayType)
            }

            "MultiPolygon" -> {
                val arrayType = object : TypeToken<List<List<List<List<Double>>>>>() {}.type
                Gson().fromJson<List<List<List<List<Double>>>>>(jsonObject.getAsJsonArray("coordinates"), arrayType)
            }
//            // 其他类型的处理
            else -> null
        }

        return Geometry(type, coordinates)
    }
}